%include	'Macros.inc'
;	��������� ��������� ���������
;	-----------------------------
; ����������� �� ������ 7�00h, � ����� ��������� ���� ��������
;	�� ������ 700h
;
	org	7c00h				;�������� ������������ ������ �������� ��
	jmp	near	Begin			;������� �� ������ ����
;������������ ����
B_1	db	'1STLDR  '			;����� ���� 8 ����
B_2	dw	200h
B_3	db	1
B_4	dw	1
B_5	db	2
B_6	dw	0e0h
B_7	dw	0b40h
B_8	db	0f0h
B_9	dw	9
B_10	dw	12h				;����� �������� �� �������
B_11	dw	2				;����� ������������ �� �������
B_12	dd	0
B_13	dd	0
B_14	db	0				;����� ���������
B_15	db	0
B_16	db	29h
B_17	dd	12344321h
B_18	db	'FIRSTLOADER'			;����� ���� 11 ����
B_19	db	'FAT12   '			;����� ���� 8 ����
Begin:
;"��������" ����������� ���������
	mov	ax,cs
	mov	ds,ax
	mov	es,ax
	mov	ss,ax
	mov	sp,7bfeh			;����������� �����
;�������� ������ ���������
	cmp	[B_14],byte 0ffh
	jne	M1
	mov	[B_14],dl
M1:
;���������� ����� ���������� �� ������700h
	xor	ax,ax				;0 - ���������� ����� ������� �����
	mov	bx,700h				;700h - ����� � ��
	call	Sec_read			;������ ������� �����
	jnc	M2				;���� ��� ������
	mov	si,Msg1				;SI <- ����� ���������
	call	Outstring			;����� ��������� �� ������
	jmp	$				;����������� ����
M2:
;���������� ��������� ���������
	mov	dx,3f2h				;DX <- ����� �����
	xor	al,al				;AL <- 0
	out	dx,al				;����� ������� � ����
;������� �� ����������� ���������
	mov	bx,M3				;BX <- ����� �������� � ��������� ����������
	sub	bx,7c00h			;BX <- ����� ������������ ������ ����������
	add	bx,700h				;BX <- ����� ��������
	jmp	near	bx			;������� �� ����� ����������
M3:
;����������� �������� ����� ����������
	Slovo	'Senkevich'
;	mov	ah,0eh				;AH <- ������� ������ �������
;	xor	bh,bh				;������� �������������
;	mov	al,'1'				;AL <- ��� �������
;	int	10h				;����� �������
;	mov	al,'2'
;	int	10h
;	mov	al,'3'
;	int	10h
	jmp	$				;����������� ����
;
;	������ ������� �����
;	--------------------
; �����: AX - ����� ������� ����� (AX >= 0)
;	 ES:BX - ��������� ����� (�������:��������) ������
; �����: CF - ������� ���������� (0 - �������, 1 - ������)
;
Sec_read:
	push	ax
	push	bx
	push	cx
	push	dx
	push	si
	mov	si,ax
;����� ��������� �������� �������
	mov	ah,0h				;�������
	mov	dl,[B_14]                       ;����� ���������
	int	13h                             
	jc	.Exit
;������ ������� (��������) �����
	mov	ax,si
	mov	si,bx
	xor	dx,dx
	mov	bx,36
	div	bx
	mov	ch,al				;����� ��������
	mov	ax,dx
	mov	bl,18
	div	bl		
	mov	dh,al                           ;����� �����������
	mov	cl,ah				;����� ����������
	inc	cl                              ; ������� �� �������
	mov	dl,[B_14]			;����� ���������
	mov	al,1				;����� ����������� ��������
	mov	ah,2                            ;�������
	mov	bx,si
	int	13h
.Exit:	pop	si
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret					;�������
;
;	����� �� ����� ������, ��������������� �����
;	--------------------------------------------
; ����: SI - �����-�������� ������� ����� ������
;
Outstring:
	push	ax
	push	bx
	push	si
.Next:	lodsb					;AL <- si-� ����, SI <- SI+1
	or	al,al				;(AL)=0?
	jz	.Exit				;���� ��
	mov	ah,0eh				;������� ������ �������
	xor	bh,bh				;������� �������������
	int	10h				;����� �������
	jmp	.Next				;�� ��������� ��������
.Exit:	pop	si
	pop	bx
	pop	ax
	ret					;�������
Msg1	db	'Error loading data', 0		;��������� �� ������ ��������
;���������� ����������� ����� � ������� ������ � ����� �������
;	���������� ����������� ���������
	times	510-($-$$)	db	0
;����������� ������ ������������� ����������� ����������
boot_signature:	dw	0aa55h
